@@ -1352,6 +1352,25 @@ SUBROUTINE OPEN_COLDSTART
1352
1352
pathnfile = trim (INPUT_DIR)// trim (GRID_FILE)
1353
1353
Call FOPEN(GRIDUNIT,trim (pathnfile),' cfr' )
1354
1354
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
+
1355
1374
# if defined (PLBC)
1356
1375
!Check plbc_cell File and open :
1357
1376
! OPEN FILE
@@ -2767,6 +2786,7 @@ END SUBROUTINE LOAD_RESTART_LSF_GRID
2767
2786
2768
2787
SUBROUTINE LOAD_RESTART_COORDS (X_LCL ,Y_LCL )
2769
2788
USE CONTROL
2789
+ USE ALL_VARS, ONLY : LON, LAT !@ Siqi Li, LONLAT@20231113
2770
2790
IMPLICIT NONE
2771
2791
REAL (SP), ALLOCATABLE,TARGET :: X_LCL(:),Y_LCL(:)
2772
2792
@@ -2793,6 +2813,28 @@ SUBROUTINE LOAD_RESTART_COORDS(X_LCL,Y_LCL)
2793
2813
CALL NC_READ_VAR(VAR)
2794
2814
CALL NC_DISCONNECT(VAR)
2795
2815
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
+
2796
2838
CASE(' degrees' )
2797
2839
! CONNECT THE VARIABLE OBJECTS AND LOAD THE DATA
2798
2840
VAR = > FIND_VAR(NC_START,' lon' ,FOUND)
@@ -4831,6 +4873,129 @@ SUBROUTINE READ_COLDSTART_SIGMA
4831
4873
4832
4874
END SUBROUTINE READ_COLDSTART_SIGMA
4833
4875
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
+
4834
4999
SUBROUTINE HelpTxt (IPT )
4835
5000
implicit none
4836
5001
INTEGER , INTENT (IN ) :: IPT
0 commit comments