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
00046 med_err
00047 MEDsubdomainCorrespondenceWr(const med_idt fid,
00048 const char * const localmeshname,
00049 const char * const jointname,
00050 const med_int numdt,
00051 const med_int numit,
00052 const med_entity_type localentitype,
00053 const med_geometry_type localgeotype,
00054 const med_entity_type remoteentitype,
00055 const med_geometry_type remotegeotype,
00056 const med_int nentity,
00057 const med_int * const correspondence) {
00058
00059 med_access_mode _MED_ACCESS_MODE;
00060 med_idt _root=0,_jntid=0,_meshid=0,_cstpid=0,_datagroup2=0;
00061 med_idt _dataset=0;
00062 med_err _ret=-1;
00063 char _path[MED_TAILLE_JNT+2*MED_NAME_SIZE+2]=MED_JNT;
00064 char _computationstepname[2*MED_MAX_PARA+1]="";
00065 char _datagroupname2[4*MED_TAILLE_NOM_ENTITE+4]="";
00066 char _localgeotypename [MED_TAILLE_NOM_ENTITE+1]="";
00067 char _remotegeotypename [MED_TAILLE_NOM_ENTITE+1]="";
00068 med_sorting_type _sortingtype=0;
00069 med_filter _filter = MED_FILTER_INIT;
00070 med_int _localgeotype = MED_NONE;
00071 med_int _localentitype = localentitype;
00072 med_int _remotegeotype = MED_NONE;
00073 med_int _remoteentitype = remoteentitype;
00074
00075 if ( localentitype == MED_NODE_ELEMENT ) _localgeotype=MED_NODE ;
00076
00077
00078 if ( localentitype != MED_NODE ) _localgeotype = localgeotype ;
00079 if ( remoteentitype != MED_NODE ) _remotegeotype = remotegeotype ;
00080
00081
00082
00083
00084 _MEDmodeErreurVerrouiller();
00085 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
00086
00087 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00088 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00089 goto ERROR;
00090 }
00091
00092 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00093 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00094 ISCRUTE_int(_MED_ACCESS_MODE);
00095 goto ERROR;
00096 }
00097
00098
00099
00100
00101 if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) {
00102 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path);
00103 goto ERROR;
00104 }
00105
00106
00107
00108
00109 if ((_meshid = _MEDdatagroupOuvrir(_root,localmeshname)) < 0) {
00110 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,localmeshname);
00111 SSCRUTE(_path);goto ERROR;
00112 }
00113
00114 strcat(_path,localmeshname);
00115
00116
00117
00118
00119 if ((_jntid = _MEDdatagroupOuvrir(_meshid,jointname)) < 0) {
00120 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,jointname);
00121 SSCRUTE(_path);goto ERROR;
00122 }
00123
00124 strcat(_path,"/");
00125 strcat(_path,jointname);
00126
00127 if ( MEDmeshSortingTypeRd(fid,localmeshname,&_sortingtype) < 0 ) {
00128 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API," MEDmeshSortingTypeRd");
00129 SSCRUTE(localmeshname);ISCRUTE_int(_sortingtype);goto ERROR;
00130 }
00131
00132 _MEDgetComputationStepName(_sortingtype,numdt,numit,_computationstepname);
00133
00134 if ((_cstpid = _MEDdatagroupOuvrir(_jntid,_computationstepname)) < 0)
00135 if ((_cstpid = _MEDdatagroupCreer(_jntid,_computationstepname)) < 0 ) {
00136 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_computationstepname);
00137 SSCRUTE(_path);goto ERROR;
00138 }
00139
00140
00141 if ( _MEDattributeIntWr(_cstpid,MED_NOM_NDT,&numdt) < 0) {
00142 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG);
00143 SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);
00144 goto ERROR;
00145 }
00146
00147
00148
00149 if ( _MEDattributeIntWr(_cstpid,MED_NOM_NOR,&numit) < 0) {
00150 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG);
00151 SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);
00152 goto ERROR;
00153 }
00154
00155
00156
00157
00158
00159
00160 if (_MEDgetEntityTypeName(_datagroupname2,localentitype) < 0) {
00161 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG);
00162 ISCRUTE_int(localentitype);SSCRUTE(jointname);goto ERROR;
00163 }
00164 if ( localentitype != MED_NODE ) {
00165 if ( _MEDgetInternalGeometryTypeName(_localgeotypename,localgeotype) < 0) {
00166 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG);
00167 ISCRUTE_int(localgeotype);SSCRUTE(jointname);goto ERROR;
00168 }
00169 strcat(_datagroupname2,".");
00170 strcat(_datagroupname2,_localgeotypename);
00171 }
00172
00173 strcat(_datagroupname2,".");
00174
00175 if (_MEDgetEntityTypeName(&_datagroupname2[strlen(_datagroupname2)],remoteentitype) < 0) {
00176 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG);
00177 ISCRUTE_int(remoteentitype);SSCRUTE(jointname);goto ERROR;
00178 }
00179 if ( remoteentitype != MED_NODE ) {
00180 if ( _MEDgetInternalGeometryTypeName(_remotegeotypename,remotegeotype) < 0) {
00181 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG);
00182 ISCRUTE_int(remotegeotype);SSCRUTE(jointname);goto ERROR;
00183 }
00184 strcat(_datagroupname2,".");
00185 strcat(_datagroupname2,_remotegeotypename);
00186 }
00187
00188
00189 if ( (_datagroup2 = _MEDdatagroupOuvrir(_cstpid,_datagroupname2)) < 0)
00190 if ((_datagroup2 = _MEDdatagroupCreer(_cstpid,_datagroupname2)) < 0) {
00191 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_datagroupname2);
00192 SSCRUTE(_path);SSCRUTE(jointname);goto ERROR;
00193 }
00194
00195
00196 if (_MEDattributeIntWr(_datagroup2,MED_NOM_ENT,&_localentitype) < 0) {
00197 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_ENT);
00198 ISCRUTE(_localentitype);goto ERROR;
00199 }
00200
00201
00202 if (_MEDattributeIntWr(_datagroup2,MED_NOM_GEO,&_localgeotype) < 0) {
00203 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_GEO);
00204 ISCRUTE(_localgeotype);goto ERROR;
00205 }
00206
00207
00208 if (_MEDattributeIntWr(_datagroup2,MED_NOM_END,&_remoteentitype) < 0) {
00209 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_END);
00210 ISCRUTE(_remoteentitype);goto ERROR;
00211 }
00212
00213
00214 if (_MEDattributeIntWr(_datagroup2,MED_NOM_GED,&_remotegeotype) < 0) {
00215 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_GED);
00216 ISCRUTE(_remotegeotype);goto ERROR;
00217 }
00218
00219
00220 if ( MEDfilterEntityCr(fid, nentity, 1, 2, MED_ALL_CONSTITUENT,
00221 MED_NO_INTERLACE,MED_UNDEF_PFLMODE,
00222 MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) {
00223 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG);
00224 goto ERROR;
00225 }
00226
00227 if ( _MEDdatasetWr(_datagroup2,MED_NOM_COR,MED_INTERNAL_INT,&_filter, correspondence) < 0) {
00228 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_COR);
00229 SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);
00230 goto ERROR;
00231 }
00232
00233 if ( MEDfilterClose(&_filter) < 0 ) {
00234 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_SUBDOMAINJOINT_MSG);
00235 SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);
00236 goto ERROR;
00237 }
00238
00239 if ((_dataset = _MEDdatasetOuvrir(_datagroup2,MED_NOM_COR)) < 0) {
00240 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,MED_NOM_COR);
00241 SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2);
00242 goto ERROR;
00243 }
00244
00245 if ( _MEDattributeIntWr(_dataset,MED_NOM_NBR,&nentity) < 0) {
00246 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG);
00247 SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2);
00248 SSCRUTE(MED_NOM_NBR);ISCRUTE(nentity);goto ERROR;
00249 }
00250
00251
00252
00253 _ret=0;
00254 ERROR:
00255
00256 if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) {
00257 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COR);
00258 ISCRUTE_id(_dataset);
00259 }
00260
00261 if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) {
00262 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2);
00263 ISCRUTE_id(_datagroup2);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);
00264 }
00265
00266 if (_cstpid>0) if (_MEDdatagroupFermer(_cstpid) < 0) {
00267 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_computationstepname);
00268 ISCRUTE_id(_cstpid);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);
00269 }
00270
00271 if (_jntid>0) if (_MEDdatagroupFermer(_jntid) < 0) {
00272 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,jointname);
00273 ISCRUTE_id(_jntid);SSCRUTE(_path);
00274 }
00275
00276 if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) {
00277 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,localmeshname);
00278 ISCRUTE_id(_meshid);
00279 }
00280
00281 if (_root>0) if (_MEDdatagroupFermer(_root) < 0) {
00282 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_JNT);
00283 ISCRUTE_id(_root);
00284 }
00285
00286 return _ret;
00287 }