Changeset 10025 for utils/tools/NESTING/src/agrif_create_coordinates.f90
- Timestamp:
- 2018-08-02T15:25:27+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
utils/tools/NESTING/src/agrif_create_coordinates.f90
r9632 r10025 39 39 ! 40 40 ! read input file (namelist.input) 41 !42 41 CALL read_namelist(namelistname) 43 !44 45 42 ! 46 43 ! read parent coodinates file 47 !48 44 status = Read_Coordinates(TRIM(parent_coordinate_file),G0) 49 45 ! 50 46 ! define name of child coordinate file 51 !52 47 CALL set_child_name(parent_coordinate_file,Child_filename) 53 48 ! … … 64 59 ! 65 60 ! allocation of child grid elements 66 !67 61 CALL agrif_grid_allocate(G1,nxfin,nyfin) 68 62 ! 69 !70 63 ! check potential longitude problems 71 !72 64 IF( G0%glamt(imin,jmin) > G0%glamt(imax,jmax) ) THEN 73 WRITE(*,*) ' ' 74 WHERE ( G0%glamt < 0 ) 75 G0%glamt = G0%glamt + 360. 76 END WHERE 77 WHERE ( G0%glamf < 0 ) 78 G0%glamf = G0%glamf + 360. 79 END WHERE 80 ENDIF 81 65 WHERE ( G0%glamt < 0 ) G0%glamt = G0%glamt + 360. 66 WHERE ( G0%glamf < 0 ) G0%glamf = G0%glamf + 360. 67 ENDIF 82 68 ! 83 69 ! interpolation from parent grid to child grid for … … 89 75 ! gphi = latitude 90 76 ! 91 92 77 ! 93 !> M. Dunphy ticket 2082:94 78 CALL agrif_interp(G0%glamt,G1%glamt,'T') 95 79 CALL agrif_interp(G0%glamf,G1%glamf,'F') 96 ! G1%glamu = G1%glamf97 ! G1%glamv = G1%glamt98 80 CALL agrif_interp(G0%glamu,G1%glamu,'U') 99 81 CALL agrif_interp(G0%glamv,G1%glamv,'V') … … 101 83 CALL agrif_interp(G0%gphit,G1%gphit,'T') 102 84 CALL agrif_interp(G0%gphif,G1%gphif,'F') 103 ! G1%gphiu = G1%gphit104 ! G1%gphiv = G1%gphif105 85 CALL agrif_interp(G0%gphiu,G1%gphiu,'U') 106 86 CALL agrif_interp(G0%gphiv,G1%gphiv,'V') 107 !< M. Dunphy ticket 2082108 87 ! 109 88 ! … … 113 92 ! 114 93 ! Compute scale factors e1 e2 115 ! 116 DO j=1,nyfin 117 DO i=2,nxfin 118 G1%e1t(i,j) = ra * rad * SQRT( (COS(rad*G1%gphit(i,j))*(G1%glamu(i,j)-G1%glamu(i-1,j)))**2 & 119 + (G1%gphiu(i,j)-G1%gphiu(i-1,j))**2) 120 G1%e1v(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiv(i,j))*(G1%glamf(i,j)-G1%glamf(i-1,j)))**2 & 121 + (G1%gphif(i,j)-G1%gphif(i-1,j))**2) 122 END DO 123 END DO 124 ! 125 G1%e1t(1,:)=G1%e1t(2,:) 126 G1%e1v(1,:)=G1%e1v(2,:) 127 ! 128 DO j=1,nyfin 129 DO i=1,nxfin-1 130 G1%e1u(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiu(i,j))*(G1%glamt(i+1,j)-G1%glamt(i,j)))**2 & 131 + (G1%gphit(i+1,j)-G1%gphit(i,j))**2) 132 G1%e1f(i,j) = ra * rad * SQRT( (COS(rad*G1%gphif(i,j))*(G1%glamv(i+1,j)-G1%glamv(i,j)))**2 & 133 + (G1%gphiv(i+1,j)-G1%gphiv(i,j))**2) 134 END DO 135 END DO 136 ! 137 G1%e1u(nxfin,:)=G1%e1u(nxfin-1,:) 138 G1%e1f(nxfin,:)=G1%e1f(nxfin-1,:) 139 ! 140 DO j=2,nyfin 141 DO i=1,nxfin 142 G1%e2t(i,j) = ra * rad * SQRT( (COS(rad*G1%gphit(i,j))*(G1%glamv(i,j)-G1%glamv(i,j-1)))**2 & 143 + (G1%gphiv(i,j)-G1%gphiv(i,j-1))**2) 144 G1%e2u(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiu(i,j))*(G1%glamf(i,j)-G1%glamf(i,j-1)))**2 & 145 + (G1%gphif(i,j)-G1%gphif(i,j-1))**2) 146 END DO 147 END DO 148 ! 149 G1%e2t(:,1)=G1%e2t(:,2) 150 G1%e2u(:,1)=G1%e2u(:,2) 151 ! 152 DO j=1,nyfin-1 153 DO i=1,nxfin 154 G1%e2v(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiv(i,j))*(G1%glamt(i,j+1)-G1%glamt(i,j)))**2 & 155 + (G1%gphit(i,j+1)-G1%gphit(i,j))**2) 156 G1%e2f(i,j) = ra * rad * SQRT( (COS(rad*G1%gphif(i,j))*(G1%glamu(i,j+1)-G1%glamu(i,j)))**2 & 157 + (G1%gphiu(i,j+1)-G1%gphiu(i,j))**2) 158 END DO 159 END DO 160 ! 161 G1%e2v(:,nyfin)=G1%e2v(:,nyfin-1) 162 G1%e2f(:,nyfin)=G1%e2f(:,nyfin-1) 163 164 165 CALL agrif_interp(G0%e1t,G1%e1t,'T') 166 G1%e1t = G1%e1t / REAL(irafx) 167 CALL agrif_interp(G0%e2t,G1%e2t,'T') 168 G1%e2t = G1%e2t / REAL(irafy) 169 170 CALL agrif_interp(G0%e1u,G1%e1u,'U') 171 G1%e1u = G1%e1u / REAL(irafx) 172 CALL agrif_interp(G0%e2u,G1%e2u,'U') 173 G1%e2u = G1%e2u / REAL(irafy) 174 175 CALL agrif_interp(G0%e1v,G1%e1v,'V') 176 G1%e1v = G1%e1v / REAL(irafx) 177 CALL agrif_interp(G0%e2v,G1%e2v,'V') 178 G1%e2v = G1%e2v / REAL(irafy) 179 180 CALL agrif_interp(G0%e1f,G1%e1f,'F') 181 G1%e1f = G1%e1f / REAL(irafx) 182 CALL agrif_interp(G0%e2f,G1%e2f,'F') 183 G1%e2f = G1%e2f / REAL(irafy) 184 185 ! 186 WHERE ( G1%glamt > 180 ) 187 G1%glamt = G1%glamt - 360. 188 END WHERE 189 WHERE ( G1%glamf > 180 ) 190 G1%glamf = G1%glamf - 360. 191 END WHERE 192 WHERE ( G1%glamu > 180 ) 193 G1%glamu = G1%glamu - 360. 194 END WHERE 195 WHERE ( G1%glamv > 180 ) 196 G1%glamv = G1%glamv - 360. 197 END WHERE 198 ! 94 ! DO j=1,nyfin 95 ! DO i=2,nxfin 96 ! G1%e1t(i,j) = ra * rad * SQRT( (COS(rad*G1%gphit(i,j))*(G1%glamu(i,j)-G1%glamu(i-1,j)))**2 & 97 ! + (G1%gphiu(i,j)-G1%gphiu(i-1,j))**2) 98 ! G1%e1v(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiv(i,j))*(G1%glamf(i,j)-G1%glamf(i-1,j)))**2 & 99 ! + (G1%gphif(i,j)-G1%gphif(i-1,j))**2) 100 ! END DO 101 ! END DO 102 ! ! 103 ! G1%e1t(1,:)=G1%e1t(2,:) 104 ! G1%e1v(1,:)=G1%e1v(2,:) 105 ! ! 106 ! DO j=1,nyfin 107 ! DO i=1,nxfin-1 108 ! G1%e1u(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiu(i,j))*(G1%glamt(i+1,j)-G1%glamt(i,j)))**2 & 109 ! + (G1%gphit(i+1,j)-G1%gphit(i,j))**2) 110 ! G1%e1f(i,j) = ra * rad * SQRT( (COS(rad*G1%gphif(i,j))*(G1%glamv(i+1,j)-G1%glamv(i,j)))**2 & 111 ! + (G1%gphiv(i+1,j)-G1%gphiv(i,j))**2) 112 ! END DO 113 ! END DO 114 ! ! 115 ! G1%e1u(nxfin,:)=G1%e1u(nxfin-1,:) 116 ! G1%e1f(nxfin,:)=G1%e1f(nxfin-1,:) 117 ! ! 118 ! DO j=2,nyfin 119 ! DO i=1,nxfin 120 ! G1%e2t(i,j) = ra * rad * SQRT( (COS(rad*G1%gphit(i,j))*(G1%glamv(i,j)-G1%glamv(i,j-1)))**2 & 121 ! + (G1%gphiv(i,j)-G1%gphiv(i,j-1))**2) 122 ! G1%e2u(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiu(i,j))*(G1%glamf(i,j)-G1%glamf(i,j-1)))**2 & 123 ! + (G1%gphif(i,j)-G1%gphif(i,j-1))**2) 124 ! END DO 125 ! END DO 126 ! ! 127 ! G1%e2t(:,1)=G1%e2t(:,2) 128 ! G1%e2u(:,1)=G1%e2u(:,2) 129 ! ! 130 ! DO j=1,nyfin-1 131 ! DO i=1,nxfin 132 ! G1%e2v(i,j) = ra * rad * SQRT( (COS(rad*G1%gphiv(i,j))*(G1%glamt(i,j+1)-G1%glamt(i,j)))**2 & 133 ! + (G1%gphit(i,j+1)-G1%gphit(i,j))**2) 134 ! G1%e2f(i,j) = ra * rad * SQRT( (COS(rad*G1%gphif(i,j))*(G1%glamu(i,j+1)-G1%glamu(i,j)))**2 & 135 ! + (G1%gphiu(i,j+1)-G1%gphiu(i,j))**2) 136 ! END DO 137 ! END DO 138 ! ! 139 ! G1%e2v(:,nyfin)=G1%e2v(:,nyfin-1) 140 ! G1%e2f(:,nyfin)=G1%e2f(:,nyfin-1) 141 142 143 CALL agrif_interp(G0%e1t,G1%e1t,'T') ; G1%e1t = G1%e1t / REAL(irafx) 144 CALL agrif_interp(G0%e2t,G1%e2t,'T') ; G1%e2t = G1%e2t / REAL(irafy) 145 146 CALL agrif_interp(G0%e1u,G1%e1u,'U') ; G1%e1u = G1%e1u / REAL(irafx) 147 CALL agrif_interp(G0%e2u,G1%e2u,'U') ; G1%e2u = G1%e2u / REAL(irafy) 148 149 CALL agrif_interp(G0%e1v,G1%e1v,'V') ; G1%e1v = G1%e1v / REAL(irafx) 150 CALL agrif_interp(G0%e2v,G1%e2v,'V') ; G1%e2v = G1%e2v / REAL(irafy) 151 152 CALL agrif_interp(G0%e1f,G1%e1f,'F') ; G1%e1f = G1%e1f / REAL(irafx) 153 CALL agrif_interp(G0%e2f,G1%e2f,'F') ; G1%e2f = G1%e2f / REAL(irafy) 154 ! 155 WHERE ( G1%glamt > 180 ) G1%glamt = G1%glamt - 360. 156 WHERE ( G1%glamf > 180 ) G1%glamf = G1%glamf - 360. 157 WHERE ( G1%glamu > 180 ) G1%glamu = G1%glamu - 360. 158 WHERE ( G1%glamv > 180 ) G1%glamv = G1%glamv - 360. 199 159 ! 200 160 G1%nav_lon=G1%glamt 201 161 G1%nav_lat=G1%gphit 202 162 ! 203 !204 163 ! Write interpolation result in child coodinates file 205 !206 164 status = Write_Coordinates(TRIM(Child_filename),G1) 207 208 165 ! 209 166 WRITE(*,*) 'Child domain position : ' 210 WRITE(*,*) 'latmin =',G1%gphit(3,3) 211 WRITE(*,*) 'latmax =',G1%gphit(nxfin-2,nyfin-2) 212 WRITE(*,*) 'lonmin =',G1%glamt(3,3) 213 WRITE(*,*) 'lonmax =',G1%glamt(nxfin-2,nyfin-2) 167 IF( ln_agrif_domain ) THEN 168 WRITE(*,*) 'latmin =',G1%gphit(3,3) 169 WRITE(*,*) 'latmax =',G1%gphit(nxfin-2,nyfin-2) 170 WRITE(*,*) 'lonmin =',G1%glamt(3,3) 171 WRITE(*,*) 'lonmax =',G1%glamt(nxfin-2,nyfin-2) 172 ELSE 173 WRITE(*,*) 'latmin =',G1%gphit(1,1) 174 WRITE(*,*) 'latmax =',G1%gphit(nxfin,nyfin) 175 WRITE(*,*) 'lonmin =',G1%glamt(1,1) 176 WRITE(*,*) 'lonmax =',G1%glamt(nxfin,nyfin) 177 ENDIF 214 178 STOP 215 179 END PROGRAM create_coordinate
Note: See TracChangeset
for help on using the changeset viewer.