GCC Code Coverage Report


Directory: ./
File: dyn3d_common/grilles_gcm_netcdf_sub.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 129 0.0%
Branches: 0 20 0.0%

Line Branch Exec Source
1 !
2 ! $Id: $
3 !
4 ! This subroutine creates the file grilles_gcm.nc containg longitudes and
5 ! latitudes in degrees for grid u and v. This subroutine is called from
6 ! ce0l. This subroutine corresponds to the first
7 ! part in the program create_fausse_var.
8 !
9 ✗ SUBROUTINE grilles_gcm_netcdf_sub(masque,phis)
10
11 USE comconst_mod, ONLY: cpp, kappa, g, omeg, daysec, rad, pi
12 USE comvert_mod, ONLY: presnivs, preff, pa
13
14 IMPLICIT NONE
15
16 INCLUDE "dimensions.h"
17 INCLUDE "paramet.h"
18 INCLUDE "comgeom.h"
19 INCLUDE "netcdf.inc"
20
21
22 REAL,DIMENSION(iip1,jjp1),INTENT(IN) :: masque ! masque terre/mer
23 REAL,DIMENSION(iip1,jjp1),INTENT(IN) :: phis ! geopotentiel au sol
24
25 REAL temp(iim+1,jjm+1)
26 ! Attributs netcdf sortie
27 INTEGER ncid_out,rcode_out
28 INTEGER out_lonuid,out_lonvid,out_latuid,out_latvid,out_levid
29 INTEGER out_varid
30 INTEGER out_lonudim,out_lonvdim
31 INTEGER out_latudim,out_latvdim,out_dim(3)
32 INTEGER out_levdim
33
34 INTEGER start(4),COUNT(4)
35
36 INTEGER status,i,j
37 REAL rlatudeg(jjp1),rlatvdeg(jjm),rlevdeg(llm)
38 REAL rlonudeg(iip1),rlonvdeg(iip1)
39
40 REAL dlon1(iip1),dlon2(iip1),dlat1(jjp1),dlat2(jjp1)
41 REAL acoslat,dxkm,dykm,resol(iip1,jjp1)
42 REAL,DIMENSION(iip1,jjp1) :: phis_loc
43 INTEGER masque_int(iip1,jjp1)
44 INTEGER :: phis_id
45 INTEGER :: area_id
46 INTEGER :: mask_id
47 INTEGER :: presnivs_id
48
49 ✗ rad = 6400000
50 ✗ omeg = 7.272205e-05
51 ✗ g = 9.8
52 ✗ kappa = 0.285716
53 ✗ daysec = 86400
54 ✗ cpp = 1004.70885
55
56 ✗ preff = 101325.
57 ✗ pa= 50000.
58
59 ✗ CALL conf_gcm( 99, .TRUE. )
60 ✗ CALL iniconst
61 ✗ CALL inigeom
62
63 ✗ DO j=1,jjp1
64 ✗ rlatudeg(j)=rlatu(j)*180./pi
65 ENDDO
66 ✗ DO j=1,jjm
67 ✗ rlatvdeg(j)=rlatv(j)*180./pi
68 ENDDO
69
70 ✗ DO i=1,iip1
71 ✗ rlonudeg(i)=rlonu(i)*180./pi + 360.
72 ✗ rlonvdeg(i)=rlonv(i)*180./pi + 360.
73 ENDDO
74
75
76 ! 2 ----- OUVERTURE DE LA SORTIE NETCDF
77 ! ---------------------------------------------------
78 ! CREATION OUTPUT
79 ! ouverture fichier netcdf de sortie out
80 ✗ status=NF_CREATE('grilles_gcm.nc',IOR(NF_CLOBBER,NF_64BIT_OFFSET),ncid_out)
81 ✗ CALL handle_err(status)
82 ✗ status=NF_DEF_DIM(ncid_out,'lonu',iim+1,out_lonudim)
83 ✗ CALL handle_err(status)
84 ✗ status=NF_DEF_DIM(ncid_out,'lonv',iim+1,out_lonvdim)
85 ✗ CALL handle_err(status)
86 ✗ status=NF_DEF_DIM(ncid_out,'latu',jjm+1,out_latudim)
87 ✗ CALL handle_err(status)
88 ✗ status=NF_DEF_DIM(ncid_out,'latv',jjm,out_latvdim)
89 ✗ CALL handle_err(status)
90
91
92 ! Longitudes en u
93 ✗ status=NF_DEF_VAR(ncid_out,'lonu',NF_FLOAT,1,out_lonudim, out_lonuid)
94 ✗ CALL handle_err(status)
95 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_lonuid,'units', 12,'degrees_east')
96 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_lonuid,'long_name',9,'Longitude en u')
97
98 ! Longitudes en v
99 ✗ status=NF_DEF_VAR(ncid_out,'lonv',NF_FLOAT,1,out_lonvdim, out_lonvid)
100 ✗ CALL handle_err(status)
101 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_lonvid,'units', 12,'degrees_east')
102 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_lonvid,'long_name', 9,'Longitude en v')
103
104 ! Latitude en u
105 ✗ status=NF_DEF_VAR(ncid_out,'latu',NF_FLOAT,1,out_latudim, out_latuid)
106 ✗ CALL handle_err(status)
107 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_latuid,'units', 13,'degrees_north')
108 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_latuid,'long_name', 8,'Latitude en u')
109
110 ! Latitude en v
111 ✗ status=NF_DEF_VAR(ncid_out,'latv',NF_FLOAT,1,out_latvdim, out_latvid)
112 ✗ CALL handle_err(status)
113 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_latvid,'units', 13,'degrees_north')
114 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_latvid,'long_name', 8,'Latitude en v')
115
116 ! ecriture de la grille u
117 ✗ out_dim(1)=out_lonudim
118 ✗ out_dim(2)=out_latudim
119 ✗ status=NF_DEF_VAR(ncid_out,'grille_u',NF_FLOAT,2,out_dim, out_varid)
120 ✗ CALL handle_err(status)
121 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_varid,'units', 6,'Kelvin')
122 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_varid,'long_name', 16,'Grille aux point u')
123
124 ! ecriture de la grille v
125 ✗ out_dim(1)=out_lonvdim
126 ✗ out_dim(2)=out_latvdim
127 ✗ status=NF_DEF_VAR(ncid_out,'grille_v',NF_FLOAT,2,out_dim, out_varid)
128 ✗ CALL handle_err(status)
129 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_varid,'units', 6,'Kelvin')
130 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_varid,'long_name', 16,'Grille aux point v')
131
132 ! ecriture de la grille u
133 ✗ out_dim(1)=out_lonvdim
134 ✗ out_dim(2)=out_latudim
135 ✗ status=NF_DEF_VAR(ncid_out,'grille_s',NF_FLOAT,2,out_dim, out_varid)
136 ✗ CALL handle_err(status)
137 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_varid,'units', 6,'Kelvin')
138 ✗ status=NF_PUT_ATT_TEXT(ncid_out,out_varid,'long_name',16,'Grille aux point u')
139
140 ✗ status=NF_ENDDEF(ncid_out)
141 ✗ write(*,*) "COUCOU 6"
142 ✗ CALL handle_err(status)
143 ! 5) ----- FERMETURE DES FICHIERS NETCDF------------------
144 ! --------------------------------------------------------
145 ! 3-b- Ecriture de la grille pour la sortie
146 ! rajoute l'ecriture de la grille
147
148 ✗ status=NF_PUT_VARA_DOUBLE(ncid_out,out_lonuid,1,iim+1,rlonudeg)
149 ✗ CALL handle_err(status)
150 ✗ status=NF_PUT_VARA_DOUBLE(ncid_out,out_lonvid,1,iim+1,rlonvdeg)
151 ✗ CALL handle_err(status)
152 ✗ status=NF_PUT_VARA_DOUBLE(ncid_out,out_latuid,1,jjm+1,rlatudeg)
153 ✗ CALL handle_err(status)
154 ✗ status=NF_PUT_VARA_DOUBLE(ncid_out,out_latvid,1,jjm,rlatvdeg)
155 ✗ CALL handle_err(status)
156
157 ✗ start(1)=1
158 ✗ start(2)=1
159 ✗ start(3)=1
160 ✗ start(4)=1
161
162 ✗ COUNT(1)=iim+1
163 ✗ COUNT(2)=jjm+1
164 ✗ COUNT(3)=1
165 ✗ COUNT(4)=1
166
167 ✗ DO j=1,jjm+1
168 ✗ DO i=1,iim+1
169 ✗ temp(i,j)=MOD(i,2)+MOD(j,2)
170 ENDDO
171 ENDDO
172
173 ✗ status=NF_PUT_VARA_DOUBLE(ncid_out,out_varid,start, count,temp)
174 ✗ CALL handle_err(status)
175
176 ! On re-ouvre le fichier pour rajouter 4 nouvelles variables necessaire pour INCA
177 ! lev - phis - aire - mask
178 ! rlevdeg(:) = presnivs
179 ✗ rlevdeg(:) = presnivs(:)
180 ✗ phis_loc(:,:) = phis(:,:)/g
181
182 ! niveaux de pression verticaux
183 ✗ status = NF_REDEF (ncid_out)
184 ✗ CALL handle_err(status)
185 ✗ status=NF_DEF_DIM(ncid_out,'lev',llm,out_levdim)
186 ✗ CALL handle_err(status)
187 status=NF_DEF_VAR(ncid_out,'presnivs',NF_FLOAT,1,out_levdim,&
188 ✗ presnivs_id)
189 ✗ CALL handle_err(status)
190
191 ! fields
192 ✗ out_dim(1)=out_lonvdim
193 ✗ out_dim(2)=out_latudim
194
195 ✗ status = nf_def_var(ncid_out,'phis',NF_FLOAT,2,out_dim,phis_id)
196 ✗ CALL handle_err(status)
197 ✗ status = nf_def_var(ncid_out,'aire',NF_FLOAT,2,out_dim,area_id)
198 ✗ CALL handle_err(status)
199 ✗ status = nf_def_var(ncid_out,'mask',NF_INT ,2,out_dim,mask_id)
200 ✗ CALL handle_err(status)
201
202 ✗ status=NF_ENDDEF(ncid_out)
203 ✗ CALL handle_err(status)
204
205 ! ecriture des variables
206 ✗ status=NF_PUT_VARA_DOUBLE(ncid_out,presnivs_id,1,llm,rlevdeg)
207 ✗ CALL handle_err(status)
208
209 ✗ start(1)=1
210 ✗ start(2)=1
211 ✗ start(3)=1
212 ✗ start(4)=0
213 ✗ COUNT(1)=iip1
214 ✗ COUNT(2)=jjp1
215 ✗ COUNT(3)=1
216 ✗ COUNT(4)=0
217
218 ✗ status = nf_put_vara_double(ncid_out, phis_id,start,count, phis_loc)
219 ✗ CALL handle_err(status)
220 ✗ status = nf_put_vara_double(ncid_out, area_id,start,count, aire)
221 ✗ CALL handle_err(status)
222 ✗ masque_int(:,:) = nINT(masque(:,:))
223 ✗ status = nf_put_vara_int(ncid_out, mask_id,start,count,masque_int)
224 ✗ CALL handle_err(status)
225
226 ! fermeture du fichier netcdf
227 ✗ CALL ncclos(ncid_out,rcode_out)
228
229 ✗ END SUBROUTINE grilles_gcm_netcdf_sub
230
231
232
233 ✗ SUBROUTINE handle_err(status)
234 INCLUDE "netcdf.inc"
235
236 INTEGER status
237 ✗ IF (status.NE.nf_noerr) THEN
238 ✗ PRINT *,NF_STRERROR(status)
239 ✗ CALL abort_gcm('grilles_gcm_netcdf','netcdf error',1)
240 ENDIF
241 ✗ END SUBROUTINE handle_err
242
243