Skip to content

Commit 5c99f0f

Browse files
committed
v4.4.9
1 parent c0a7e0e commit 5c99f0f

File tree

7 files changed

+194
-7
lines changed

7 files changed

+194
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# FVCOM 4.4.8
1+
# FVCOM 4.4.9
22

33
http://fvcom.smast.umassd.edu/
44

src/coords_n_const.F

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,9 @@ SUBROUTINE COORDS_N_CONST
193193

194194

195195
CALL LOAD_COLDSTART_COORDS(X_GBL,Y_GBL,X_LCL,Y_LCL)
196+
# if !defined (SPHERICAL)
197+
CALL LOAD_COLDSTART_LONLAT !@ Siqi Li, LONLAT@20231113
198+
# endif
196199
CALL COORDINATE_UNITS(X_LCL,Y_LCL)
197200
CALL SETUP_CENTER_COORDS
198201

src/fvcom.F

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
!/===========================================================================/
2828

2929
!==============================================================================!
30-
! VERSION 4.4.8
30+
! VERSION 4.4.9
3131
!==============================================================================!
3232

3333
PROGRAM FVCOM

src/mod_input.F

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,6 +1352,25 @@ SUBROUTINE OPEN_COLDSTART
13521352
pathnfile = trim(INPUT_DIR)//trim(GRID_FILE)
13531353
Call FOPEN(GRIDUNIT,trim(pathnfile),'cfr')
13541354

1355+
# if !defined (SPHERICAL)
1356+
!@---> Siqi Li, LONLAT@20231113
1357+
!Check LONLAT File and open:
1358+
if (TRIM(LONLAT_FILE) /= 'none') then
1359+
USE_LONLAT = .TRUE.
1360+
! TEST FILE NAME
1361+
charnum = index (LONLAT_FILE,".dat")
1362+
if (charnum /= len_trim(LONLAT_FILE)-3)&
1363+
& CALL WARNING("LONLAT FILE does not end in .dat", &
1364+
& trim(LONLAT_FILE))
1365+
! OPEN FILE
1366+
pathnfile = trim(INPUT_DIR)//trim(LONLAT_FILE)
1367+
Call FOPEN(LONLATUNIT,trim(pathnfile),'cfr')
1368+
else
1369+
USE_LONLAT = .FALSE.
1370+
endif
1371+
!@<--- Siqi Li
1372+
# endif
1373+
13551374
# if defined (PLBC)
13561375
!Check plbc_cell File and open:
13571376
! OPEN FILE
@@ -2767,6 +2786,7 @@ END SUBROUTINE LOAD_RESTART_LSF_GRID
27672786

27682787
SUBROUTINE LOAD_RESTART_COORDS(X_LCL,Y_LCL)
27692788
USE CONTROL
2789+
USE ALL_VARS, ONLY : LON, LAT !@ Siqi Li, LONLAT@20231113
27702790
IMPLICIT NONE
27712791
REAL(SP), ALLOCATABLE,TARGET :: X_LCL(:),Y_LCL(:)
27722792

@@ -2793,6 +2813,28 @@ SUBROUTINE LOAD_RESTART_COORDS(X_LCL,Y_LCL)
27932813
CALL NC_READ_VAR(VAR)
27942814
CALL NC_DISCONNECT(VAR)
27952815

2816+
!@---> Siqi Li, LONLAT@20231113
2817+
VAR => FIND_VAR(NC_START,'lon',FOUND)
2818+
IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'lon'&
2819+
& IN THE HOTSTART FILE OBJECT")
2820+
CALL NC_CONNECT_AVAR(VAR, LON)
2821+
CALL NC_READ_VAR(VAR)
2822+
CALL NC_DISCONNECT(VAR)
2823+
2824+
VAR => FIND_VAR(NC_START,'lat',FOUND)
2825+
IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'lat'&
2826+
& IN THE HOTSTART FILE OBJECT")
2827+
CALL NC_CONNECT_AVAR(VAR, LAT)
2828+
CALL NC_READ_VAR(VAR)
2829+
CALL NC_DISCONNECT(VAR)
2830+
2831+
IF (MINVAL(LON)==MAXVAL(LON) .AND. MINVAL(LAT)==MAXVAL(LAT)) THEN
2832+
USE_LONLAT = .FALSE.
2833+
ELSE
2834+
USE_LONLAT = .TRUE.
2835+
ENDIF
2836+
!@<--- Siqi Li
2837+
27962838
CASE('degrees')
27972839
! CONNECT THE VARIABLE OBJECTS AND LOAD THE DATA
27982840
VAR => FIND_VAR(NC_START,'lon',FOUND)
@@ -4831,6 +4873,129 @@ SUBROUTINE READ_COLDSTART_SIGMA
48314873

48324874
END SUBROUTINE READ_COLDSTART_SIGMA
48334875

4876+
!---> Siqi Li, LONLAT@2031113
4877+
SUBROUTINE READ_COLDSTART_LONLAT(LONLATUNIT,MGL,XG1,YG1)
4878+
4879+
IMPLICIT NONE
4880+
INTEGER, INTENT(IN) :: LONLATUNIT, MGL
4881+
REAL(SP),ALLOCATABLE,INTENT(INOUT) :: XG1(:),YG1(:)
4882+
CHARACTER(LEN=80) :: temp
4883+
INTEGER :: I,IOS,NodeCount, ISCAN
4884+
Real(sp) :: X1, Y1
4885+
!==============================================================================|
4886+
4887+
!----------------Determine Number of Nodes -----------------------!
4888+
ISCAN = SCAN_FILE(LONLATUNIT,"Node Number",ISCAL = NODECOUNT)
4889+
IF(ISCAN /= 0) then
4890+
write(temp,'(I2)') ISCAN
4891+
call fatal_error('Improper formatting of LONLAT FILE: ISCAN ERROR&
4892+
&# '//trim(temp),&
4893+
& 'The header must contain: "Node Number ="', &
4894+
& 'Followed by an integer number of nodes')
4895+
END IF
4896+
4897+
if ( NODECOUNT .NE. MGL) &
4898+
& CALL FATAL_ERROR('The stated number of nodes in the lonlat file',&
4899+
' does not match the number in the grid file')
4900+
4901+
!----------------Read LONLAT Array----------------------------------!
4902+
! FIND FIRST LINE of CONNECTIVITY ARRAY
4903+
rewind LONLATUNIT
4904+
NHEADER = 0
4905+
DO WHILE(.TRUE.)
4906+
READ(LONLATUNIT,*,IOSTAT=IOS,END=99)X1,Y1
4907+
if (IOS == 0) then
4908+
exit
4909+
end if
4910+
4911+
NHEADER = NHEADER + 1
4912+
CYCLE
4913+
4914+
99 Call FATAL_ERROR('Improper formatting of LONLAT FILE:',&
4915+
&'Reached end of file with out finding LONLAT data?',&
4916+
&'FORMAT: X Y (ALL REALS)')
4917+
END DO
4918+
4919+
REWIND LONLATUNIT
4920+
DO I = 1, NHEADER
4921+
READ(LONLATUNIT,*)
4922+
END DO
4923+
4924+
I = 0
4925+
DO WHILE(.TRUE.)
4926+
READ(LONLATUNIT,*,IOSTAT=IOS) X1,Y1
4927+
IF(IOS < 0) exit
4928+
I = I + 1
4929+
IF(I > MGL) CALL FATAL_ERROR('Number of rows of data in the lonlat file &
4930+
& exceeds the number of nodes ?')
4931+
IF(X1 < 0.0) X1 = X1 + 360.0_SP
4932+
XG1(I) = X1
4933+
YG1(I) = Y1
4934+
END DO
4935+
4936+
if ( I .NE. MGL) &
4937+
& CALL FATAL_ERROR('The number of rows of data in the lonlat file does&
4938+
& not equal the number of nodes?')
4939+
4940+
if(DBG_SET(dbg_log)) then
4941+
WRITE(IPT,*)'! Finished Reading LONLAT File'
4942+
WRITE(IPT,*)'! LON range = :',minval(XG1(1:MGL)),maxval(XG1(1:MGL))
4943+
WRITE(IPT,*)'! LAT range = :',minval(YG1(1:MGL)),maxval(YG1(1:MGL))
4944+
WRITE(IPT,*)'!'
4945+
end if
4946+
4947+
END SUBROUTINE READ_COLDSTART_LONLAT
4948+
4949+
4950+
SUBROUTINE LOAD_COLDSTART_LONLAT
4951+
USE CONTROL
4952+
USE ALL_VARS
4953+
IMPLICIT NONE
4954+
integer status,I,IERR
4955+
REAL(SP), ALLOCATABLE :: LON_GL(:), LAT_GL(:)
4956+
INTEGER :: SENDID,SENDER
4957+
4958+
IF(PAR) CALL MPI_BCAST(USE_LONLAT,1,MPI_LOGICAL,0,MPI_FVCOM_GROUP,IERR)
4959+
4960+
ALLOCATE(LON_GL(0:MGL))
4961+
ALLOCATE(LAT_GL(0:MGL))
4962+
4963+
IF (MSR) THEN
4964+
! Read (LON, LAT) from the ASCII input
4965+
CALL READ_COLDSTART_LONLAT(LONLATUNIT,MGL,LON_GL,LAT_GL)
4966+
CLOSE(LONLATUNIT)
4967+
END IF
4968+
4969+
# if defined (MULTIPROCESSORdd)
4970+
IF(PAR)THEN
4971+
SENDER = MSRID - 1
4972+
CALL MPI_BCAST(LON_GL,MGL,MPI_F,SENDER,MPI_FVCOM_GROUP,IERR)
4973+
CALL MPI_BCAST(LAT_GL,MGL,MPI_F,SENDER,MPI_FVCOM_GROUP,IERR)
4974+
LON_GL(0)=0.0_SP
4975+
LAT_GL(0)=0.0_SP
4976+
END IF
4977+
# endif
4978+
4979+
! Convert it from the global vairable to the local one.
4980+
IF (SERIAL) THEN
4981+
LON = LON_GL
4982+
LAT = LAT_GL
4983+
ELSE
4984+
# if defined (MULTIPROCESSOR)
4985+
CALL ADEAL(MYID,MSRID,NPROCS,NXMAP,LON_GL,LON)
4986+
CALL ADEAL(MYID,MSRID,NPROCS,NXMAP,LAT_GL,LAT)
4987+
# endif
4988+
ENDIF
4989+
4990+
IF (MSR) THEN
4991+
DEALLOCATE(LON_GL)
4992+
DEALLOCATE(LAT_GL)
4993+
ENDIF
4994+
4995+
END SUBROUTINE LOAD_COLDSTART_LONLAT
4996+
!<--- Siqi Li
4997+
4998+
48344999
SUBROUTINE HelpTxt(IPT)
48355000
implicit none
48365001
INTEGER, INTENT(IN) :: IPT

src/mod_main.F

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,12 +802,14 @@ MODULE CONTROL
802802
CHARACTER(LEN=80) GRID_FILE
803803
CHARACTER(LEN=80) GRID_FILE_UNITS
804804
CHARACTER(LEN=200) PROJECTION_REFERENCE
805+
CHARACTER(LEN=80) LONLAT_FILE !@ Siqi Li, LONLAT@20231113
805806
CHARACTER(LEN=80) SIGMA_LEVELS_FILE
806807
CHARACTER(LEN=80) DEPTH_FILE
807808
CHARACTER(LEN=80) CORIOLIS_FILE
808809
CHARACTER(LEN=80) SPONGE_FILE
809810
810811
LOGICAL USE_PROJ
812+
LOGICAL USE_LONLAT !@ Siqi Li, LONLAT@20231113
811813
! THESE ARE THE FVCOM NAMES FOR
812814
!SIGMA_LEVELS = KB
813815
!SIGMA_LAYERS = KBM1 = KB - 1
@@ -817,6 +819,7 @@ MODULE CONTROL
817819
& GRID_FILE, &
818820
& GRID_FILE_UNITS, &
819821
& PROJECTION_REFERENCE, &
822+
& LONLAT_FILE, & !@ Siqi Li, LONLAT@20231113
820823
& SIGMA_LEVELS_FILE, &
821824
& DEPTH_FILE, &
822825
& CORIOLIS_FILE, &
@@ -1157,6 +1160,7 @@ MODULE CONTROL
11571160
INTEGER, PARAMETER :: NESTUNIT=30
11581161
INTEGER, PARAMETER :: SUBDUNIT=31
11591162
INTEGER, PARAMETER :: NANUNIT=32 ! Siqi Li, NAN@20230601
1163+
INTEGER, PARAMETER :: LONLATUNIT=33 !@ Siqi Li, LONLAT@20231113
11601164
11611165
INTEGER :: RIVERNMLUNIT
11621166
@@ -1216,10 +1220,12 @@ MODULE ALL_VARS
12161220
REAL(SP), ALLOCATABLE,TARGET :: YM(:) !!Y-COORD AT NODE IN METERS
12171221
REAL(SP), ALLOCATABLE,TARGET :: XMC(:) !!X-COORD AT CELL CENTER IN METERS
12181222
REAL(SP), ALLOCATABLE,TARGET :: YMC(:) !!Y-COORD AT CELL CENTER IN METERS
1223+
!@---> Siqi Li, LONLAT@20231113
12191224
REAL(SP), ALLOCATABLE,TARGET :: LON(:) !!LONGITUDE AT THE NODE
12201225
REAL(SP), ALLOCATABLE,TARGET :: LAT(:) !!LATITUDE AT THE NODE
12211226
REAL(SP), ALLOCATABLE,TARGET :: LONC(:) !!LONGITUDE AT THE NODE
12221227
REAL(SP), ALLOCATABLE,TARGET :: LATC(:) !!LATITUDE AT THE NODE
1228+
!@<--- Siqi Li
12231229
! VX,VY and XC,YC are used for either meters or spherical depending on
12241230
! make file option 'SPHERICAL'
12251231
REAL(SP), ALLOCATABLE,TARGET :: VX(:) !!X-COORD AT GRID POINT

src/mod_setup.F

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,18 @@ SUBROUTINE SETUP_CENTER_COORDS
142142
YMC = YC + VYMIN
143143
YMC(0)= 0.0_SP
144144

145-
IF (USE_PROJ ) THEN
146-
IF (SERIAL) THEN
145+
!@---> Siqi Li, LONLAT@20231113
146+
IF (USE_LONLAT) THEN
147+
CALL N2E2D(LON, LONC)
148+
CALL N2E2D(LAT, LATC)
149+
ENDIF
150+
!@<--- Siqi
151+
152+
!@---> Siqi Li, LONLAT@20231113
153+
! IF (USE_PROJ ) THEN
154+
IF (USE_PROJ .AND. .NOT. USE_LONLAT) THEN
155+
!@<---
156+
IF (SERIAL) THEN
147157
CALL Meters2Degrees(XMC(1:NT),YMC(1:NT)&
148158
& ,PROJECTION_REFERENCE,LONC(1:NT),LATC(1:NT),NT)
149159
# if defined (MULTIPROCESSOR)
@@ -695,7 +705,10 @@ SUBROUTINE COORDINATE_UNITS(XL,YL)
695705
YM = YL
696706

697707
! USE PROJECTION TOOL BOX TO CONVERT TO DEGREES
698-
IF (USE_PROJ ) THEN
708+
!---> Siqi Li, LONLAT@20231113
709+
! IF (USE_PROJ ) THEN
710+
IF (USE_PROJ .AND. .NOT. USE_LONLAT) THEN
711+
!@<---
699712
IF (SERIAL) THEN
700713
CALL meters2degrees(XL(1:MT),YL(1:MT), &
701714
& PROJECTION_REFERENCE,LON(1:MT),LAT(1:MT),MT)

src/mod_utils.F

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ SUBROUTINE INITIALIZE_CONTROL(NAME)
141141
! FVCOM VERSION !
142142
!==============================================================================!
143143

144-
FVCOM_VERSION = 'FVCOM_4.4.8'
144+
FVCOM_VERSION = 'FVCOM_4.4.9'
145145
FVCOM_WEBSITE = 'http://fvcom.smast.umassd.edu, https://github.com/FVCOM-GitHub/FVCOM'
146146
INSTITUTION = 'School for Marine Science and Technology'
147147

@@ -2324,7 +2324,7 @@ SUBROUTINE WRITE_BANNER(PAR,NP,ID)
23242324
WRITE(IPT,*)' | ___) | | | || | | | | || ||_|| | '
23252325
WRITE(IPT,*)' | | \ \ / / | |_____ | |___| || | | | '
23262326
WRITE(IPT,*)' |_| \___/ \______) \_____/ |_| |_| '
2327-
WRITE(IPT,*)' -- Version 4.4.8 Release'
2327+
WRITE(IPT,*)' -- Version 4.4.9 Release'
23282328
WRITE(IPT,*)'!================================================================!'
23292329
WRITE(IPT,*)'! !'
23302330
WRITE(IPT,*)'!========DOMAIN DECOMPOSITION USING: METIS 4.0.1 ================!'

0 commit comments

Comments
 (0)