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
00040 med_err
00041 MEDfieldCr( const med_idt fid,
00042 const char * const fieldname,
00043 const med_field_type fieldtype,
00044 const med_int ncomponent,
00045 const char * const componentname,
00046 const char * const componentunit,
00047 const char * const dtunit,
00048 const char * const meshname)
00049 {
00050 med_err _ret=-1;
00051 med_idt _root=0,_datagroup1=0;
00052 med_int _fieldtype = (med_int) fieldtype;
00053 char _datagroupname1 [MED_NAME_SIZE+1]="";
00054 med_access_mode _MED_ACCESS_MODE;
00055
00056 _MEDmodeErreurVerrouiller();
00057 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
00058
00059 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00060 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00061 goto ERROR;
00062 }
00063
00064 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00065 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00066 ISCRUTE_int(_MED_ACCESS_MODE);
00067 goto ERROR;
00068 }
00069
00070
00071
00072
00073 if ((_root = _MEDdatagroupOuvrir(fid,MED_CHA)) < 0)
00074 if ((_root = _MEDdatagroupCreer(fid,MED_CHA)) < 0) {
00075 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_CHA);
00076 goto ERROR;
00077 }
00078
00079 NOFINALBLANK(fieldname,ERROR);
00080
00081
00082
00083 if ((_datagroup1 = _MEDdatagroupOuvrir(_root,fieldname)) < 0)
00084 if ((_datagroup1 = _MEDdatagroupCreer(_root,fieldname)) < 0 ) {
00085 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_CHA);
00086 SSCRUTE(fieldname);goto ERROR;
00087 }
00088
00089
00090
00091
00092
00093 if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NCO,&ncomponent) < 0 ) {
00094 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
00095 SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NCO);
00096 ISCRUTE(ncomponent);goto ERROR;
00097 }
00098 if ( _MEDattributeIntWr(_datagroup1,MED_NOM_TYP,&_fieldtype) < 0) {
00099 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
00100 SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_TYP);
00101 ISCRUTE(_fieldtype);goto ERROR;
00102 }
00103 if ( _MEDattributeStringWr(_datagroup1,MED_NOM_NOM,
00104 MED_SNAME_SIZE*ncomponent,componentname) < 0) {
00105 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
00106 SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NOM);
00107 SSCRUTE(componentname);goto ERROR;
00108 }
00109 if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNI,
00110 MED_SNAME_SIZE*ncomponent,componentunit) < 0) {
00111 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
00112 SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNI);
00113 SSCRUTE(componentunit);goto ERROR;
00114 }
00115
00116
00117
00118
00119 if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) {
00120 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
00121 SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNT);
00122 SSCRUTE(dtunit);goto ERROR;
00123 }
00124
00125
00126
00127
00128 NOFINALBLANK(meshname,ERROR);
00129
00130 if (_MEDattributeStringWr(_datagroup1,MED_NOM_MAI,MED_NAME_SIZE,meshname) < 0) {
00131 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
00132 SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_MAI);
00133 SSCRUTE(meshname);
00134 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,meshname);
00135 goto ERROR;
00136 }
00137
00138
00139
00140
00141
00142
00143 _ret=0;
00144 ERROR:
00145
00146 if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) {
00147 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1);
00148 ISCRUTE_id(_datagroup1);
00149 }
00150
00151 if (_root>0) if (_MEDdatagroupFermer(_root) < 0) {
00152 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_CHA);
00153 ISCRUTE_id(_root);
00154 }
00155
00156 return _ret;
00157 }