For a 2D structure I think you should still make the ucf file as if it's gonna be 3D, and then set the thickness in the input file to that of one monolayer.
1) If you don't write anything for number_of_materials then it defaults to 1. For "mat" you write the material id, so if you have 2 materials then you write '0' for the atoms of material 1 and '1' for the atoms of material 2.
I honestly don't know what lc and hc are but it seems you can usually set them to zero. I don't think they actually affect the simulation. Instead they are for output specifications. They describe them briefly in the manual but call them 'cat_id' and 'hcat_id' (page 23).
2) Yes '0' means isotropic. The types of interactions are listed in the manual:
isotropic, vectorial, tensorial, normalized-isotropic, normalized-vectorial, normalized-tensorial.
Vampire has a youtube channel and in at least two of the videos there they go into some detail about the construction of unit cells. I found "Introduction to Anti-Ferromagnets" to be pretty helpful. They also have a video about visualization, "Using the VAMPIRE Data Converter", which you could use to ensure you're getting the monolayer you want.
Another thing that could be helpful for understanding the ucf files is to uncomment lines 159 to 167 in vampire/src/unitcell/interactions.cpp, and replace "std::err" with "std::cout" (otherwise it will print it three times for some reason). Then run "make clean" and "make all" in the vampire folder. When you run a "normal" simulation the interaction list will be shown in the terminal, together with another quantity in the second last column 'rij', which I assume is the distance between the atoms normalized by the lattice constant. You can tell by the variable names in the code what the other quantities are.
Try adding some lines before and after:
std::cout << std::endl;
std::cout << "::::: 'Output interactions to screen' (unitcell/interactions.cpp) :::::" << std::endl;
std::cout << "IID\ti\tj\tdx\tdy\tdz\tRij/a\tJij/J" << std::endl;
for(int i=0; i<unit_cell.interaction.size(); i++){
std::cout << i << "\t" << unit_cell.interaction[i].i << "\t"
<< unit_cell.interaction[i].j << "\t"
<< unit_cell.interaction[i].dx << "\t"
<< unit_cell.interaction[i].dy << "\t"
<< unit_cell.interaction[i].dz << "\t"
<< unit_cell.interaction[i].rij << "\t"
<< unit_cell.interaction[i].Jij[0][0] << std::endl;
}
std::cout << "::::: ----------------------------------------------------------- :::::" << std::endl;
std::cout << std::endl;Be careful with changing the code though, and make back-ups of the files. My vdc doesn't work any more.