00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022
00023 #include <string.h>
00024 #include <stdlib.h>
00025
00048 med_err
00049 MEDlocalizationWr(const med_idt fid,
00050 const char * const localizationname,
00051 const med_geometry_type geotype,
00052 const med_int spacedimension,
00053 const med_float* const elementcoordinate,
00054 const med_switch_mode switchmode,
00055 const med_int nipoint,
00056 const med_float* const ipointcoordinate,
00057 const med_float* const weight,
00058 const char * const geointerpname,
00059 const char * const sectionmeshname
00060 )
00061 {
00062 med_access_mode _MED_ACCESS_MODE;
00063 med_err _ret = -1;
00064 med_idt _lzid=0, _root=0;
00065 med_int _nentity=0;
00066 med_int _intgeotype = -1;
00067 char _path[MED_TAILLE_GAUSS+MED_NAME_SIZE+1]=MED_GAUSS;
00068 med_filter _filter = MED_FILTER_INIT;
00069
00070
00071
00072
00073 _MEDmodeErreurVerrouiller();
00074 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
00075
00076 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00077 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00078 goto ERROR;
00079 }
00080
00081 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00082 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00083 ISCRUTE_int(_MED_ACCESS_MODE);
00084 goto ERROR;
00085 }
00086
00087
00088
00089
00090 if (! strcmp(localizationname,MED_GAUSS_ELNO)) {
00091 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_LOCALIZATION,localizationname);
00092 goto ERROR;
00093 }
00094
00095
00096
00097
00098 if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0)
00099 if ((_root = _MEDdatagroupCreer(fid,_path)) < 0) {
00100 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_path);
00101 goto ERROR;
00102 }
00103
00104 NOFINALBLANK(localizationname,ERROR);
00105
00106
00107
00108 if ((_lzid = _MEDdatagroupOuvrir(_root,localizationname)) < 0)
00109 if ((_lzid = _MEDdatagroupCreer(_root,localizationname)) < 0) {
00110 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,localizationname);
00111 SSCRUTE(_path);goto ERROR;
00112 }
00113
00114 strcat(_path,localizationname);
00115
00116
00117
00118
00119
00120 if (_MEDattributeIntWr(_lzid,MED_NOM_NBR,&nipoint) < 0) {
00121 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG);
00122 SSCRUTE(localizationname);SSCRUTE(MED_NOM_NBR);ISCRUTE(nipoint);
00123 goto ERROR;
00124 }
00125
00126
00127
00128
00129
00130 _intgeotype = (med_int) geotype;
00131
00132
00133
00134
00135
00136
00137 if (_MEDattributeIntWr(_lzid,MED_NOM_GEO,&_intgeotype) < 0) {
00138 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG);
00139 SSCRUTE(localizationname);SSCRUTE(MED_NOM_GEO);ISCRUTE(_intgeotype);
00140 goto ERROR;
00141 };
00142
00143
00144
00145
00146 if (_MEDattributeIntWr(_lzid,MED_NOM_DIM,&spacedimension) < 0) {
00147 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG);
00148 SSCRUTE(localizationname);SSCRUTE(MED_NOM_DIM);ISCRUTE(spacedimension);
00149 goto ERROR;
00150 };
00151
00152
00153 if ( ! ((geotype > MED_STRUCT_GEO_INTERNAL ) &&
00154 (geotype < MED_STRUCT_GEO_SUP_INTERNAL) ) ) {
00155
00156
00157
00158 _nentity = (geotype%100);
00159
00160 if ( MEDfilterEntityCr(fid,_nentity, 1, spacedimension, MED_ALL_CONSTITUENT,
00161 switchmode,MED_UNDEF_PFLMODE,
00162 MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) {
00163 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG);
00164 goto ERROR;
00165 }
00166
00167 if ( _MEDdatasetWr(_lzid,MED_NOM_COO,MED_INTERNAL_FLOAT64,&_filter, elementcoordinate) < 0) {
00168 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_COO);SSCRUTE(_path);
00169 goto ERROR;
00170 }
00171
00172 if ( MEDfilterClose(&_filter) < 0 ) {
00173 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_path);
00174 goto ERROR;
00175 }
00176 } else {
00177
00178
00179
00180
00181 if ( _MEDattributeStringWr(_lzid,MED_NOM_NOM,MED_NAME_SIZE,sectionmeshname) < 0) {
00182 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG);
00183 SSCRUTE(localizationname);SSCRUTE(MED_NOM_NOM);SSCRUTE(sectionmeshname);
00184 goto ERROR;
00185 }
00186 }
00187
00188
00189
00190
00191 if ( _MEDattributeStringWr(_lzid,MED_NOM_INM,MED_NAME_SIZE,geointerpname) < 0) {
00192 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG);
00193 SSCRUTE(localizationname);SSCRUTE(MED_NOM_INM);SSCRUTE(geointerpname);
00194 goto ERROR;
00195 }
00196
00197
00198
00199
00200
00201
00202 _nentity = nipoint;
00203 if ( MEDfilterEntityCr(fid,_nentity, 1, spacedimension, MED_ALL_CONSTITUENT,
00204 switchmode,MED_UNDEF_PFLMODE,
00205 MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) {
00206 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG);
00207 goto ERROR;
00208 }
00209
00210 if ( _MEDdatasetWr(_lzid,MED_NOM_GAU,MED_INTERNAL_FLOAT64,&_filter, ipointcoordinate) < 0) {
00211 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_GAU);SSCRUTE(_path);
00212 goto ERROR;
00213 }
00214
00215 if ( MEDfilterClose(&_filter) < 0 ) {
00216 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_path);
00217 goto ERROR;
00218 }
00219
00220
00221
00222
00223
00224 _nentity = nipoint;
00225 if ( MEDfilterEntityCr(fid,_nentity, 1, 1, MED_ALL_CONSTITUENT,
00226 switchmode,MED_UNDEF_PFLMODE,
00227 MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) {
00228 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG);
00229 goto ERROR;
00230 }
00231
00232 if ( _MEDdatasetWr(_lzid,MED_NOM_VAL,MED_INTERNAL_FLOAT64,&_filter, weight) < 0) {
00233 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_VAL);SSCRUTE(_path);
00234 goto ERROR;
00235 }
00236
00237 if ( MEDfilterClose(&_filter) < 0 ) {
00238 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_path);
00239 goto ERROR;
00240 }
00241
00242
00243 _ret = 0;
00244
00245 ERROR:
00246
00247 if (_lzid>0) if (_MEDdatagroupFermer(_lzid) < 0) {
00248 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,localizationname);
00249 ISCRUTE_id(_lzid);
00250 }
00251
00252 if (_root>0) if (_MEDdatagroupFermer(_root) < 0) {
00253 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_GAUSS);
00254 ISCRUTE_id(_root);
00255 }
00256
00257 return _ret;
00258
00259 }
00260