File indexing completed on 2025-08-05 05:09:15 UTC
view on githubraw file Latest commit 13ce79fe on 2025-08-04 21:05:34 UTC
24462d2fa8 Patr*0001 #include "PROFILES_OPTIONS.h"
6a770e0a24 Patr*0002
13ce79fe94 Ivan*0003
0004
0005
6a770e0a24 Patr*0006
13ce79fe94 Ivan*0007
0008 SUBROUTINE PROFILES_READVECTOR( fNb, vNb, irec,
0009 & vec_loc_length, vec_loc, bi, bj, myThid )
6a770e0a24 Patr*0010
13ce79fe94 Ivan*0011
0012
0013
6a770e0a24 Patr*0014
13ce79fe94 Ivan*0015
0016 IMPLICIT NONE
0017
6a770e0a24 Patr*0018 #include "SIZE.h"
275a56dc21 Gael*0019 #include "EEPARAMS.h"
0020 #include "PARAMS.h"
6a770e0a24 Patr*0021 #include "GRID.h"
0022 #include "DYNVARS.h"
d28c90138c Patr*0023 #ifdef ALLOW_PROFILES
6328b73337 Gael*0024 # include "netcdf.inc"
0025 # include "PROFILES_SIZE.h"
0026 # include "profiles.h"
6e4c90fea3 Patr*0027 #endif
13ce79fe94 Ivan*0028
0029
0030
0031 INTEGER vec_loc_length,vNb,bi,bj
0032 INTEGER irec,fNb,myThid
6a770e0a24 Patr*0033 _RL vec_loc(vec_loc_length)
13ce79fe94 Ivan*0034
6e4c90fea3 Patr*0035
13ce79fe94 Ivan*0036
0037 INTEGER num_var,v1,v2
0038 INTEGER err,varId1,tmpprofno
d28c90138c Patr*0039 #ifdef ALLOW_PROFILES
13ce79fe94 Ivan*0040 INTEGER vec_start(2),vec_count(2)
6a770e0a24 Patr*0041 _RL vec_tmp1(1000*NLEVELMAX),vec_tmp2(1000*NLEVELMAX)
13ce79fe94 Ivan*0042 # ifdef ALLOW_PROFILES_CLIMMASK
6b2230d510 Ou W*0043 _RL vec_tmp3(1000*NLEVELMAX)
13ce79fe94 Ivan*0044 # endif
0045 CHARACTER*(MAX_LEN_MBUF) msgBuf
0046
0047 IF ( (irec.LT.profiles_minind_buff(bi,bj)) .OR.
0048 & (irec.GT.profiles_maxind_buff(bi,bj)) .OR.
0049 & (profiles_curfile_buff(bi,bj).NE.fNb) ) THEN
0050 err = NF_INQ_DIMID(fiddata(fNb,bi,bj),'iPROF', varId1)
0051 CALL PROFILES_NF_ERROR(
0052 & 'READVECTOR: NF_INQ_DIMID fiddata iProf',
0053 & err,bi,bj,myThid )
0054 err = NF_INQ_DIMLEN( fiddata(fNb,bi,bj), varId1, tmpprofno )
0055 CALL PROFILES_NF_ERROR( 'READVECTOR: NF_INQ_DIMLEN tmpprofno',
0056 & err,bi,bj,myThid )
0057
0058 IF (profiles_curfile_buff(bi,bj).NE.fNb) THEN
0059
0060 profiles_minind_buff(bi,bj) = MAX(1,irec-500+1)
0061 profiles_maxind_buff(bi,bj) = MIN(tmpprofno,irec+500)
0062
0063 ELSEIF (irec.LT.profiles_minind_buff(bi,bj)) THEN
0064
0065 profiles_minind_buff(bi,bj) = MAX(1,irec-999)
0066 profiles_maxind_buff(bi,bj) = irec
0067
0068 ELSE
0069
0070 profiles_minind_buff(bi,bj) = irec
0071 profiles_maxind_buff(bi,bj) = MIN(tmpprofno,irec+999)
0072
0073 ENDIF
0074
0075 # ifdef ALLOW_DEBUG
0076 IF (debugLevel.GE.debLevD) THEN
0077 WRITE(msgBuf,'(A,5I9)')
0078 & 'buffer readvector ',
0079 & profiles_minind_buff(bi,bj), profiles_maxind_buff(bi,bj),
0080 & irec, profNo(fNb,bi,bj), tmpprofno
0081 CALL PRINT_MESSAGE( msgBuf,
0082 & standardMessageUnit, SQUEEZE_RIGHT, myThid )
0083 ENDIF
0084 # endif
0085
0086 vec_start(1) = 1
0087 vec_start(2) = profiles_minind_buff(bi,bj)
0088 vec_count(1) = vec_loc_length
0089 vec_count(2) =
0090 & profiles_maxind_buff(bi,bj)-profiles_minind_buff(bi,bj)+1
0091
0092 DO num_var = 1, NVARMAX
0093 IF ( vec_quantities(fNb,num_var,bi,bj) ) THEN
0094 err = NF_INQ_VARID( fiddata(fNb,bi,bj),
0095 & prof_names(fNb,num_var), varId1 )
0096 CALL PROFILES_NF_ERROR(
0097 & 'READVECTOR: NF_INQ_VARID prof_names',
0098 & err,bi,bj,myThid )
0099 err = NF_GET_VARA_DOUBLE( fiddata(fNb,bi,bj), varId1,
0100 & vec_start, vec_count, vec_tmp1 )
0101 CALL PROFILES_NF_ERROR(
0102 & 'READVECTOR: NF_GET_VARA_DOUBLE vec_tmp1',
0103 & err,bi,bj,myThid )
0104
0105 err = NF_INQ_VARID( fiddata(fNb,bi,bj),
0106 & prof_namesweight(fNb,num_var), varId1 )
0107 CALL PROFILES_NF_ERROR(
0108 & 'READVECTOR: NF_INQ_VARID '//prof_namesweight(fNb,num_var),
0109 & err,bi,bj,myThid )
0110 err = NF_GET_VARA_DOUBLE( fiddata(fNb,bi,bj),
0111 & varId1, vec_start, vec_count, vec_tmp2 )
0112 CALL PROFILES_NF_ERROR(
0113 & 'READVECTOR: NF_GET_VARA_DOUBLE vec_tmp2',
0114 & err,bi,bj,myThid )
0115
0116 # ifdef ALLOW_PROFILES_CLIMMASK
0117 err = NF_INQ_VARID( fiddata(fNb,bi,bj),
0118 & prof_namesclim(fNb,num_var),varId1 )
0119 CALL PROFILES_NF_ERROR(
0120 & 'READVECTOR: NF_INQ_VARID prof_namesclim',
0121 & err,bi,bj,myThid )
0122 err = NF_GET_VARA_DOUBLE( fiddata(fNb,bi,bj),
0123 & varId1,vec_start,vec_count, vec_tmp3 )
0124 CALL PROFILES_NF_ERROR(
0125 & 'READVECTOR: NF_GET_VARA_DOUBLE vec_tmp3',
0126 & err,bi,bj,myThid )
0127 # endif
0128
0129 IF (err.NE.NF_NOERR) THEN
0130 WRITE(errorMessageUnit,'(A)')
0131 & 'WARNING PROFILES_READVECTOR: record not found!!'
0132 ENDIF
0133
0134 DO v1 = 1, vec_count(1)
0135 DO v2 = 1, vec_count(2)
0136 profiles_data_buff(v1,v2,num_var,bi,bj) =
0137 & vec_tmp1((v2-1)*vec_count(1)+v1)
0138
0139 profiles_weight_buff(v1,v2,num_var,bi,bj) =
0140 & vec_tmp2((v2-1)*vec_count(1)+v1)
0141
0142 # ifdef ALLOW_PROFILES_CLIMMAS
0143 IF (vec_tmp3((v2-1)*vec_count(1)+v1).LE.-990. _d 0)
0144 & profiles_weight_buff(v1,v2,num_var,bi,bj) = 0. _d 0
0145
0146 # endif
0147 ENDDO
0148 ENDDO
0149
0150 ENDIF
0151 ENDDO
0152
0153 profiles_curfile_buff(bi,bj) = fNb
0154 ENDIF
0155
0156
0157 IF (vNb.LT.0) THEN
0158 DO v1 = 1, vec_loc_length
0159 vec_loc(v1) = profiles_weight_buff
0160 & (v1,irec-profiles_minind_buff(bi,bj)+1,-vNb,bi,bj)
0161 ENDDO
0162
0163 ELSE
0164 DO v1 = 1, vec_loc_length
0165 vec_loc(v1) = profiles_data_buff
0166 & (v1,irec-profiles_minind_buff(bi,bj)+1,vNb,bi,bj)
0167 ENDDO
6a770e0a24 Patr*0168
13ce79fe94 Ivan*0169 ENDIF
6a770e0a24 Patr*0170
13ce79fe94 Ivan*0171 #endif /* ALLOW_PROFILES */
6a770e0a24 Patr*0172
13ce79fe94 Ivan*0173 RETURN
6a770e0a24 Patr*0174 END